package com.br.negocio.web.backbean;

import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.br.negocio.controller.ControllerCidade;
import com.br.negocio.vo.CidadeVO;
import com.br.negocio.vo.EstadoVO;
import com.br.negocio.web.formbean.CidadeFormBean;

@Controller("cidadeBackBean")
@Scope("session")
public class CidadeBackBean{

	private static final long serialVersionUID = 1L;
	
	@Resource
	private ControllerCidade controllerCidade;
	
	private CidadeFormBean cidadeFormBean;

	public CidadeBackBean() {
		super();
		this.cidadeFormBean = new CidadeFormBean();
	}

	public CidadeFormBean getCidadeFormBean() {
		return this.cidadeFormBean;
	}

	public void setCidadeFormBean(CidadeFormBean cidadeFormBean) {
		this.cidadeFormBean = cidadeFormBean;
	}
	
	// M�TODOS

	public void obterListaCidade() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.cidadeFormBean.setListaCidade(this.controllerCidade.obterListaCidade());
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao obter a lista de cidade: " + e.getMessage()));
		}
	}
	
	public void manterCidade() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.cidadeFormBean.getCidadeManter().setEstadoVO(this.getCidadeFormBean().getEstadoManter());
			this.controllerCidade.atualizarCidade(this.cidadeFormBean.getCidadeManter());
			this.cidadeFormBean.setIsDisabled(true);
			context.addMessage(null, new FacesMessage("Sucesso: Inser��o realizada com sucesso!"));
		} catch (Exception e) {
			context.addMessage(null , new FacesMessage("Erro ao manter o cidade: " + e.getMessage()));
		}

	}
	
	public void excluirCidade() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			if (this.getCidadeFormBean().getCidadeManter().getCodigo() != 0) {
				this.controllerCidade.removerCidade(this.cidadeFormBean.getCidadeManter());
				if (!this.cidadeFormBean.getListaCidade().isEmpty()) {
					this.cidadeFormBean.setListaCidade(this.controllerCidade.obterListaCidade());
				}
				this.cidadeFormBean.setCidadeManter(new CidadeVO());
				context.addMessage(null, new FacesMessage("Sucesso: Cidade exclu�do com sucesso!"));
			}
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao excluir o cidade: " + e.getMessage()));
		}
	}
	
	// LISTENERS
	
	public void listenerIrInserirCidade(ActionEvent evento) {
		this.cidadeFormBean.setEstadoManter(new EstadoVO());
		this.cidadeFormBean.setCidadeManter(new CidadeVO());
		this.cidadeFormBean.setIsDisabled(false);
		this.cidadeFormBean.setHead("Cadastrar Cidade");
	}
	
	public void listenerIrExcluirCidade(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoCidadeExcluir");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			CidadeVO cidadeVO = new CidadeVO();
			cidadeVO.setCodigo(codigo);
			this.cidadeFormBean.setCidadeManter(this.controllerCidade.obterCidade(cidadeVO));
			this.cidadeFormBean.setEstadoManter(this.cidadeFormBean.getCidadeManter().getEstadoVO());
		}
		this.cidadeFormBean.setHead("Excluir Cidade");
		this.cidadeFormBean.setIsDisabled(true);
	}
	
	public void listenerIrEditarCidade(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoCidadeEditar");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			CidadeVO cidadeVO = new CidadeVO();
			cidadeVO.setCodigo(codigo);
			this.cidadeFormBean.setCidadeManter(this.controllerCidade.obterCidade(cidadeVO));
			this.cidadeFormBean.setEstadoManter(this.cidadeFormBean.getCidadeManter().getEstadoVO());
		}
		this.cidadeFormBean.setHead("Editar Cidade");
		this.cidadeFormBean.setIsDisabled(false);
	}

}